#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import pyinotify
import os,shutil
import time
import threading
import requests
import logging

# 第一步，创建一个logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)   # Log等级总开关
 
# 第二步，创建一个handler，用于写入日志文件
logfile = './log2.txt'
fh = logging.FileHandler(logfile, mode='a')
fh.setLevel(logging.INFO)  # 用于写到file的等级开关
 
# 第三步，再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)    # 输出到console的log等级的开关
 
# 第四步，定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
 
# 第五步，将logger添加到handler里面
logger.addHandler(fh)
logger.addHandler(ch)
#-----------------------------------------------

class MyEventHandler(pyinotify.ProcessEvent):
    def process_IN_CREATE(self,event):
        logger.info('收到新的文件 {}'.format(event.pathname))
        t = threading.Thread(target=run, args=(event.pathname,))
        t.setDaemon(True)
        t.start()

def run(filepath):
    logger.debug('判断文件是否结束 {}'.format(filepath))
    statinfo = os.stat(filepath)
    mtime1 = 0
    b = True
    while b:
        mtime2 = statinfo.st_mtime
        if (mtime1 == mtime2):
            b = False
            url = "http://wwww.baidu.com"
            filename = os.path.basename(filepath)
            data = {"name":filename}
            logger.info('通知服务器 {},{}'.format(filename, url))
            res = requests.post(url=url,data=data)
            if (res.status_code != requests.codes.ok):
            	logger.error('通知服务器失败 {},{}'.format(filename, url))
        else:
            logger.debug('下次比较')
            mtime1 = mtime2
            time.sleep(5)


def watch():
    # 监控多个事件
    multi_event = pyinotify.IN_CREATE
    # 创建WatchManager对象
    wm = pyinotify.WatchManager()

    # 定制化事件处理类，注意继承
    # 必须为process_事件名称，event表示事件对象
    # event.pathname 表示触发事件的文件路径
    handler = MyEventHandler()
    notifier = pyinotify.Notifier(wm,handler)
    logger.info('启动文件监控')
    wm.add_watch('/root/tmp', multi_event, rec=True)
    notifier.loop()


if __name__ == '__main__':
    watch()